Computer software systems such as word processors, page composition programs and the like are generally configured to render, into device pixels, collections of graphical objects such as bitmap images, photographic images, text, and filled shapes. In these systems it is common to receive instructions from the page description file (typically referred to by the acronym “PDL”), which may be PDF, PostScript, GDI or the like, to render a sequence or group of objects over and over again. The term PDL may refer in this specification either to the page description file, or to the Page Description Language used to produce the page description file.
The instruction to render an object repeatedly may occur as an explicit instruction to create a region tiled with these objects at a regular spacing, or the instruction may require that a group be printed once and then again at a different unrelated location, possibly after being processed by a spatial transform. Either of these cases involves repeated use of CPU time and memory, which systems in the art have attempted to reduce in various ways.
For example, a tiled region may be painted by rendering its constituent objects to pixels at device resolution and then allowing the final page render to tile the image by wrapping it modulo the image size. Rendering the objects to pixels at device resolution presents difficulties due to large memory usage when the repeated tile is large, and also cannot always produce correct results when the tiled group uses some compositing operations with its background.
Other systems have attempted to represent the repeated image more compactly by using an intermediate format such as run-length encoding or filled trapezoids, but these schemes have been limited to upright tiles and simple integer pixel translations of the tile, which do not satisfy the requirement of all PDL's.
Alternatively, a system may re-use or repeat the objects simply by replaying them from the PDL, but this method can suffer from performance degradation when the objects making up the group contain complex operations such as color conversions and the like, which are then executed many times for the same input data. Also with some PDL's it is not feasible to replay objects on request.